12980 - 점프와 순간 이동
정보
- 문제 보기: 12980 - 점프와 순간 이동
- 소요 시간: 44분 51초 ▶️ 4분 50초
- 풀이 언어:
pythonjava - 체감 난이도: 2️⃣~3️⃣ ▶️ 2️⃣
- 리뷰 횟수: ✅✅
풀이 키워드
스포주의
구현 그리디
풀이 코드
- Python
- Java
정보
- 메모리: 9340 KB
- 시간: 0 ms
def solution(n):
ans = 0
while 0 < n:
isOdd = n & 1
n = (n - 1 if isOdd else n // 2)
ans += isOdd
return ans
정보
- 메모리: 99100 KB
- 시간: 0 ms
public class Solution {
public int solution(int n) {
int ans = 0;
while (n > 0) {
if ((n & 1) == 1) {
++ans;
--n;
}
else n >>= 1;
}
return ans;
}
}
풀이 해설
DP는 시간초과가 발생하여 그리디로 접근해야 하는 문제이다.
📌 역발상하기
0을 연산하여 n을 만든다고 생각하면 시작할때 무조건 1을 점프해야되고, 이 부분의 처리가 깔끔하지 않으므로
역으로 n에서 0으로 연산하는 발상이 필요하다.